#define _CRT_SECURE_NO_WARNINGS 1


#include <stdio.h>

//int main()
//{
//	char* pc = NULL;//
//	short* ps = NULL;//
//	int* pi = NULL;//
//	double* pd = NULL;//
//	printf("%zu\n", sizeof(pc));//
//	printf("%zu\n", sizeof(ps));//
//	printf("%zu\n", sizeof(pi));//
//	printf("%zu\n", sizeof(pd));
//	//sizeof 的返回值类型是unsigned int，
//	//在打印的时候最好%zu来接收sizeof的结果
//	return 0;//
//}


//int main()
//{
//	int a = 0x11223344;//
//	char* pc = (char*)&a;
//	//&a得到的是内存空间中存放a的那个空间的门牌号
//	//此时由于a的数据类型是整型，所以当给一个名叫pc的字符型指针变量进行赋值时
//	//通过强制类型转换，将使得等式两端类型匹配
//  虽然 等号= 两端都是一个8位16进制数，
//	//但char* pc = &a的写法是错误的，
//	*pc = 0;
//	//此时如果给pc这个指针变量解引用，
//	//得到的能够访问的空间长度只是1个字符类型的长度，
//	//a存放在某一个以8位的16进制数σ作为编号的内存空间内，a要了4个字节的长度
//	//解引用操作符*是对后面指针变量的编号σ的空间向后访问一个字符长度,(因为是字符型指针)
//	//也就是0在此时理解为一个字符型数据，将a的某一段字符长度的内容赋值为0
//	//这个某一段其实就是 存放a的最低位的一个内存空间，即44存放对应的内存空间
//	//其中σ等于 存放a的最低位的一个内存空间的编号
//	//强制类型转换并不是将&a的类型改变了以后才赋值给pc，
//	//在之后使用的时候，仍然把pc看作是字符型指针变量，&a仍然是整型类型的地址号码
//	return 0;//
//}
//  这个程序的结果是将0x11223300赋值给a


//int main()
//{
//	int a = 0;//
//	int* pi = &a;//
//	float* pf = (float*)&a;//
//	*pi = 100;//
//	//*pi = 100;与*pf = 100.0;这两句话并不等价，存放进去a之后得到的内容也不一样
//	return 0;//
//}



//int main()
//{
//    int* p3 = NULL;//
//    ... ...
//        if (p3 != NULL)
//        {
//            *p3 = 100;//
//        }
//    return 0;//
//}
//  以上这段程序针对的是下面的情况
//  想在程序开头就创建一个指针，但在程序一开始没有给出他应该指向的变量
//  所以就可以视作一个标准的公式，这样写代码能避免一部分的野指针


//int main()
//{
//    int a = 10;//
//    int b = 20;//
//    int c = 30;//
//    int* pa = &a;//
//    int** ppa = &pa;
//    //二级指针是 存放一级指针变量 的地址的 指针变量
//    int* parr[10] = { &a, &b, &c };
//    //这时创建了一个数组，里面放入的元素都是地址，
//    //或者说指针，注意此时放进去的并不是指针变量
//    int i = 0;//
//    for (i = 0; i < 3; i++)
//    {
//        printf("%d ", *(parr[i]));
//        //解引用后面常跟的三种形式
//        //1、指针变量   2、指针数组中的元素  3、指针变量加减得到的新的指针变量
//    }
//    return 0;//
//}


int main()
{
    int arr1[4] = { 1, 2, 3, 4 };//
    int arr2[4] = { 2, 3, 4, 5 };//
    int arr3[4] = { 3, 4, 5, 6 };//
    int* parr[3] = { arr1, arr2, arr3 };//
    int i = 0;//
    int j = 0;//
    int rsz = sizeof(parr) / sizeof(parr[0]);//
    int csz = sizeof(arr1) / sizeof(arr1[0]);//
    for (i = 0; i < rsz; i++)
    {
        for (j = 0; j < csz; j++)
        {
            printf("%d ", parr[i][j]);//
        }
        printf("\n");//
    }
    return 0;//
}